Amazon LinuxのDockerでDocker Hubとの通信に失敗する
ども、大瀧です。
DockerをAmazon Linuxで実行していると、docker push
やdocker pull
の実行で度々社内でトラブルになることがあります。なんてことはないバグなのですが、Amazon Linux特有のため知名度が低いので、備忘録を兼ねて現象と対処方法をここにまとめておきます。
症状
例えば、以下のようにDocker HubにDockerイメージをPushしようとすると、400エラーになります。
$ docker push takipone/ubuntu:latest The push refers to a repository [takipone/ubuntu] (len: 1) 6d4946999d4f: Image already exists 9fd3c8c9af32: Image successfully pushed 435050075b3f: Image successfully pushed 428b411c28f0: Image successfully pushed FATA[0048] Error pushing to registry: Server error: 400 trying to push takipone/ubuntu:latest manifest $
Push以外にPullでも同様の400エラーの報告がありました。また、Docker Hub以外にDocker Registry v2(Docker Distribution)でも報告があります。Push時の特徴としては、断片化された個々のイメージのアップロードは順調に進み、最後のマニフェストの登録で400エラーになる残念な挙動があります。404や403ではなく、400エラーというのも目立ちますね。
対処方法
Amazon LinuxのDockerパッケージのバージョン1.6.0-1.5.amzn1で修正されたバグに起因するものです。バージョン1.6.0-1.3.amzn1以下の場合は、yum update
でバージョンを上げましょう。Amazon Linuxのパッケージ特有のようなので、他のディストリビューションのdockerパッケージは問題なさそうです。
Docker本体には関係なさそうなのですが、とばっちり(苦笑)で上げられたGitHubのIssueが詳しいです。
ややこしいのが、DockerをサポートするマネージドサービスであるBeanstalkとECS(EC2 Container Service)の場合です。適宜Solution Stackのアップデートやyum update
の実行を検討しましょう。Dockerパッケージの対象バージョンに対応するSolution StackやAMIを以下に示します。
- Elastic Beanstalk Docker/Multi-container Dockerの対応バージョン(v1.4.0以前がアップデート対象)
- 64bit Amazon Linux 2015.03 v1.4.1 running Docker 1.6.0
- 64bit Amazon Linux 2015.03 v1.4.1 running Multi-container Docker 1.6.0 (Generic)
- ECS-Optimized Amazon Linuxの対応バージョン(2015.03.b以前がアップデート対象)
- Amazon Linux AMI 2015.03.c x86_64 ECS HVM GP2
まとめ
ちょっと珍しい、Dockerのバグに起因する不具合情報のご紹介でした。意外と原因の切り分けに苦戦しそうな部分だと思うので、何かのトラブルシューティングのお役に立てれば幸いです。